package model

import (
	"github.com/jinzhu/gorm"
	_const "go-admin/internal/model/const"
)

type User struct {
	CommonModel
	IsBanned string `json:"isBanned"` // 是否禁用
	Remark   string `json:"remark"`   // 备注信息
	Username string `json:"username"` // 登录名称
	Password string `json:"password"` // 登录密码
	RealName string `json:"realName"` // 真是姓名
	Phone    string `json:"phone"`    // 手机号
	Avatar   string `json:"avatar"`   // 头像地址
	Gender   string `json:"gender"`   // 性别
	Email    string `json:"email"`    // 邮箱
	DeptId   string `json:"deptId"`   // 部门id
	JobId    string `json:"jobId"`    // 岗位id
}

// 重置表名
func (u *User) TableName() string {
	return "sys_user"
}

// 创建
func (u *User) Create(db *gorm.DB) (string, error) {
	return u.Id, db.Create(&u).Error
}

// 根据用户名称获取用户信息
func (u *User) GetUserByUserName(db *gorm.DB, username string) (*User, error) {
	var user User
	if err := db.Where("is_del = ?", _const.ISDEL).Where("username = ?", username).First(&user).Error; err != nil {
		// 判断错误
		switch {
		case err == gorm.ErrRecordNotFound:
			// 说明没有找到
			return &user, nil
		case err != nil:
			return &user, err
		}
	}
	return &user, nil
}

// 获取总数
func (u *User) Count(db *gorm.DB) (int, error) {
	var count int
	if u.IsBanned != "" {
		db = db.Where("is_banned = ?", u.IsBanned)
	}
	if u.DeptId != "" {
		db = db.Where("dept_id = ?", u.DeptId)
	}
	if err := db.Model(&u).Where("is_del = ?", _const.ISDEL).Count(&count).Error; err != nil {
		return 0, err
	}
	return count, nil
}

// 获取列表
func (u *User) List(db *gorm.DB, pageOffset, pageSize int) ([]*User, error) {
	var users []*User
	var err error
	db = db.Offset(pageOffset).Limit(pageSize)
	if u.IsBanned != "" {
		db = db.Where("is_banned = ?", u.IsBanned)
	}
	if u.DeptId != "" {
		db = db.Where("dept_id = ?", u.DeptId)
	}
	if err = db.Where("is_del = ?", _const.ISDEL).Find(&users).Error; err != nil {
		return nil, err
	}
	return users, nil
}

// 根据id获取详情
func (u *User) GetUserById(db *gorm.DB) (*User, error) {
	var user User
	if err := db.Where("id = ?", u.Id).First(&user).Error; err != nil {
		// 判断错误
		switch {
		case err == gorm.ErrRecordNotFound:
			// 说明没有找到
			return &user, nil
		case err != nil:
			return &user, err
		}
	}
	return &user, nil
}

// 更新
func (u *User) Update(db *gorm.DB, values interface{}) error {
	if err := db.Model(&u).Updates(values).Where("id = ?", u.Id).Error; err != nil {
		return err
	}
	return nil
}

// 批量软删除
func (u *User) Deletes(db *gorm.DB, ids []string, values interface{}) error {
	return db.Model(&u).Where("id IN (?)", ids).Updates(values).Error
}


